package com.chouren.goandroid.util;

import android.content.res.Resources;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;

public class ImageUtil {
	/**
	 * 对drwable下的资源文件做压缩处理
	 * @param resId		资源文件
	 * @param width		压缩后的宽度
	 * @param height	压缩后的高度
	 * @return			压缩后的bitmap
	 */
	public static Bitmap decodeBitmap(Resources res, int resId, int width, int height) {
		
		// 加载图片，仅加载图片信息，不返回bitmap对象
		final BitmapFactory.Options options = new BitmapFactory.Options();
		options.inJustDecodeBounds = true;
		BitmapFactory.decodeResource(res, resId, options);
		
		// 设置缩放比例
		options.inSampleSize = calculateInSampleSize(options, width, height);
		
		// 返回bitmap对象
		options.inJustDecodeBounds = false;
		
		return BitmapFactory.decodeResource(res, resId, options);
	}
	
	/**
	 * 计算图片压缩的比例
	 * @param options		压缩信息
	 * @param reqWidth		压缩后的宽度
	 * @param reqHeight		压缩后的高度
	 * @return				压缩的比例		
	 */
	public static int calculateInSampleSize(BitmapFactory.Options options,
			int reqWidth, int reqHeight) {
		// 保存图片原宽高值
		final int width = options.outWidth;
		final int height = options.outHeight;
		// 初始化压缩比例为1
		int inSampleSize = 1;

		// 当图片宽高值任何一个大于所需压缩图片宽高值时,进入循环计算系统
		if (height > reqHeight || width > reqWidth) {

			final int halfHeight = height / 2;
			final int halfWidth = width / 2;

			// 压缩比例值每次循环两倍增加,
			// 直到原图宽高值的一半除以压缩值后都~大于所需宽高值为止
			while ((halfHeight / inSampleSize) >= reqHeight
					&& (halfWidth / inSampleSize) >= reqWidth) {
				inSampleSize *= 2;
			}
		}

		return inSampleSize;
	}
}
